
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.Select;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Set;

import static java.lang.Thread.sleep;
import static java.util.concurrent.TimeUnit.MINUTES;

public class PageTest {
    public static void main(String[] args) throws InterruptedException, IOException {
//        test09();    //切换窗口句柄

//        test01();   //两个页面切换iframe

        test02();   //找到所有的input标签对应的元素

//        test0301();   //下拉框 （选钱）
//        test0302();

//        test0401();   //alert弹窗输入文本
//        test0402();

//        test05();   //上传文件


    }

    /**
     * 定位一组元素
     * 思路：找到所有的input标签对应的元素
     *      遍历元素
     *      如果input标签对应的元素type属性值等于checkbox，点击
     *      否则什么都不敢
     *      最终将最终的执行结果进行截图保存
     * @throws InterruptedException
     */
    private static void test02() throws InterruptedException{
        WebDriver webDriver = new ChromeDriver();
        // 打开目标页面
        webDriver.get("file:///D:/Code%E5%85%8B%E9%9A%86/test/Auto_test01/src/main/java/page/test02.html");
        // 找到所有的input里面的元素
        List<WebElement> input_button = webDriver.findElements(By.cssSelector("input"));
        // 遍历元素
        for(int i = 0; i < input_button.size(); i++) {
            // 如果type=checkbox就选中
            if(input_button.get(i).getAttribute("type").equals("checkbox")) {
                input_button.get(i).click();
            }
            // 否则什么也不干
        }
        // 将执行完毕的页面进行截图
        try {
            // 截图
            File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
            // 将截图后的文件复制到D:\截图.png
            FileUtils.copyFile(file, new File("D:\\TestPage01.png"));
        }catch (IOException ioException) {
            ioException.getMessage();
        }
        sleep(3000);
        webDriver.quit();
    }

    /**
     * 切换iframe
     * 思路：打开目标页面(两个界面重叠在一起了)
     *      切换到f1
     *      找到click按钮再进行点击
     * @throws InterruptedException
     */

    private static void test01() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        // 打开目标页面
        webDriver.get("file:///D:/Code%E5%85%8B%E9%9A%86/test/Auto_test01/src/main/java/page/test01.html");
        sleep(3000);
        // 切换到f1
        webDriver.switchTo().frame("f1");
        // 找到click按钮点击
        sleep(3000);
        webDriver.findElement(By.cssSelector("body > div > div > a")).click();
        sleep(3000);
        webDriver.switchTo().alert().accept();
        sleep(2000);
        webDriver.quit();
    }

    /**
     * 切换窗口句柄
     * 切换思路：打开百度首页
     *         点击新闻按钮，
     *         获取到所有的窗口句柄
     *         遍历所有的窗口句柄，得到最后一个窗口句柄
     *         打印当前url
     *         获取热点要闻按钮文本
     *         如果是“热点要闻”，测试通过，否则测试不通过
     *
     */
    private static void test09() {
        // 创建一个浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 打开百度首页
        webDriver.get("https://www.baidu.com/");
        // 找到新闻按钮,点击
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
        // 获取所有的窗口句柄
        Set<String> all_windows_handle = webDriver.getWindowHandles();
        // 遍历窗口句柄
        String target_handle = "";
        for(String handle : all_windows_handle) {
            target_handle = handle;
        }
        // 将窗口句柄切换到目标窗口
        webDriver.switchTo().window(target_handle);
        // 打印当前url
        System.out.println(webDriver.getCurrentUrl());
        // 获取“热点要闻按钮文本”，进行比较，如果热点要闻按钮文本等于“热点要闻”，测试通过
        if(webDriver.findElement(By.cssSelector("#headline-tabs > ul > li > a")).getText().equals("热点要闻")) {
            System.out.println("测试通过");
        } else {
            System.out.println("测试不通过");
        }
        // 退出浏览器
        webDriver.quit();
    }


    /**
     * 下拉框处理
     * @throws InterruptedException
     * @throws IOException
     * 思路：先定位到下拉框，
     *      再通过定位到的下拉框元素找到下拉框选项，点击
     *      最终截图保存
     */
    private static void test0301() throws InterruptedException, IOException {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 打开目标网页
        webDriver.get("file:///D:/Code%E5%85%8B%E9%9A%86/test/Auto_test01/src/main/java/page/test03.html");
        sleep(3000);
        // 先定位选项框
        // 再通过选项框找到某个选项进行点击
        webDriver.findElement(By.cssSelector("#ShippingMethod")).findElement(By.cssSelector("#ShippingMethod > option:nth-child(5)")).click();
        // 截图
        File screen_shot = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        // 将截图保存到D:\TestPage04.png
        FileUtils.copyFile(screen_shot, new File("D:\\TestPage04.png"));
        // 退出浏览器
        sleep(3000);
        webDriver.quit();
    }


    /**
     * 下拉框处理
     * @throws IOException
     * 思路：找到option元素
     *      创建一个select对象
     *      通过下标的形式选中第三个选项（下标是从0开始的）
     *      截图
     */
    private static void test0302() throws IOException, InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("file:///D:/Code%E5%85%8B%E9%9A%86/test/Auto_test01/src/main/java/page/test03.html");
        // 找到选项元素
        WebElement select_element = webDriver.findElement(By.cssSelector("#ShippingMethod"));
        sleep(2000);
        // 创建一个select对象
        Select select = new Select(select_element);
        // 选择第三个选项（下标从0开始）
        select.selectByIndex(3);
        sleep(3000);
        // 截图
        File screen_shot = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(screen_shot, new File("D:\\TestPage04.png"));
        webDriver.quit();
    }



    /**
     * alert弹窗输入文本
     * alert确认
     * @throws InterruptedException
     */
    private static void test0401() throws InterruptedException {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 打开目标页面
        webDriver.get("file:///D:/Code%E5%85%8B%E9%9A%86/test/Auto_test01/src/main/java/page/test04.html");
        // 点击“请点击”按钮
        webDriver.findElement(By.cssSelector("body > input[type=button]")).click();
        sleep(3000);
        // 焦点切换到alert
        // alert弹窗中输入test
        String input_string = "test";
        webDriver.switchTo().alert().sendKeys(input_string);
        // 确定
        webDriver.switchTo().alert().accept();
        sleep(3000);
        // 获取当前页面的body文本
        String body_string = webDriver.findElement(By.cssSelector("body")).getText();
        String expected_string = "Hello test!";
        String resulted_string = body_string;
        // 比较，如果页面展示Hello input_string!测试通过
        // 否则测试不通过
        if(expected_string.equals(resulted_string)) {
            System.out.println("测试通过");
        } else {
            System.out.println("测试不通过");
            System.out.println("预期结果是：" + expected_string);
            System.out.println("执行结果是：" + webDriver.findElement(By.cssSelector("body")).getText());
        }
        webDriver.quit();
    }

    /**
     * alert弹窗取消
     * @throws InterruptedException
     */
    private static void test0402() throws InterruptedException {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 打开目标页面
        webDriver.get("file:///D:/Code%E5%85%8B%E9%9A%86/test/Auto_test01/src/main/java/page/test04.html");
        // 点击“请点击”按钮
        webDriver.findElement(By.cssSelector("body > input[type=button]")).click();
        sleep(3000);
        // alert弹窗选择取消
        webDriver.switchTo().alert().dismiss();
        sleep(3000);
        // 退出浏览器
        webDriver.quit();
    }

    /**
     * 上传文件
     * @throws InterruptedException
     */
    private static void test05() throws InterruptedException, IOException {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 打开目标网页
        webDriver.get("file:///D:/Code%E5%85%8B%E9%9A%86/test/Auto_test01/src/main/java/page/test05.html");
        sleep(3000);
        // 上传文件
        webDriver.findElement(By.cssSelector("body > div > div > input[type=file]")).sendKeys("D:\\图片\\乔治.jpg");
        File screen_shot = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(screen_shot, new File("D:\\TestPage07.png"));
        sleep(3000);
        webDriver.quit();
    }

}